package br.com.foxinline.modelo;

import br.com.foxinline.generico.EntidadeGenerica;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;
import javax.persistence.Transient;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.Digits;

/**
 *
 * @author elyjunior
 */
@Entity
public class RevisaoAlinhamento extends EntidadeGenerica {

    @Id
    @SequenceGenerator(sequenceName = "seq_revisao_alinhamento", name = "seq_revisao_alinhamento", allocationSize = 1)
    @GeneratedValue(generator = "seq_revisao_alinhamento", strategy = GenerationType.SEQUENCE)
    private Long id;
    @ManyToOne
    private Imovel imovel;
    private String numeroProcesso;
    @DecimalMin(value = "0.00")
    @Digits(fraction = 2, integer = 10)
    private BigDecimal frente;
    @DecimalMin(value = "0.00")
    @Digits(fraction = 2, integer = 10)
    private BigDecimal ladoDireito;
    @DecimalMin(value = "0.00")
    @Digits(fraction = 2, integer = 10)
    private BigDecimal ladoEsquerdo;
    @DecimalMin(value = "0.00")
    @Digits(fraction = 2, integer = 10)
    private BigDecimal fundo;
    @DecimalMin(value = "0.00")
    @Digits(fraction = 2, integer = 10)
    private BigDecimal areaTotal;
    private String matricula;
    private String livro;
    private String folha;
    @Temporal(javax.persistence.TemporalType.TIMESTAMP)
    private Date datada;
    private String descricao;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date proximaData;
    @OneToMany(cascade = CascadeType.ALL)
    private List<HistoricoRevisaoAlinhamento> historicoRevisaoAlinhamentos;
    private Boolean invasao;
    private String descricaoPavimentacao;
    // Campos Para relatórios
    @Transient
    private String proprietarioField;
    @Transient
    private String localImovelField;
    @Transient
    private String frenteNumeroField;
    @Transient
    private String fundoNumeroField;
    @Transient
    private String areaTotalField;
    @Transient
    private String ladoDireitoNumeroField;
    @Transient
    private String ladoEsquerdoNumeroField;
    @Transient
    private String areaTotalNumeroField;
    @Transient
    private String frenteTextoField;
    @Transient
    private String fundoTextoField;
    @Transient
    private String ladoEsquerdoTextoField;
    @Transient
    private String ladoDireitoTextoField;
    @Transient
    private String descricaoField;
    @Transient
    private String textoInvasao;
    @Transient
    private String descricaoPavimentacaoField;
    @OneToOne
    private Requerimento requerimento;
    private Boolean finalizado;

    public RevisaoAlinhamento() {
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Imovel getImovel() {
        return imovel;
    }

    public void setImovel(Imovel imovel) {
        this.imovel = imovel;
    }

    public String getNumeroProcesso() {
        return numeroProcesso;
    }

    public void setNumeroProcesso(String numeroProcesso) {
        this.numeroProcesso = numeroProcesso;
    }

    public BigDecimal getFrente() {
        return frente;
    }

    public void setFrente(BigDecimal frente) {
        this.frente = frente;
    }

    public Boolean getFinalizado() {
        return finalizado;
    }

    public void setFinalizado(Boolean finalizado) {
        this.finalizado = finalizado;
    }

    public BigDecimal getLadoDireito() {
        return ladoDireito;
    }

    public void setLadoDireito(BigDecimal ladoDireito) {
        this.ladoDireito = ladoDireito;
    }

    public BigDecimal getLadoEsquerdo() {
        return ladoEsquerdo;
    }

    public void setLadoEsquerdo(BigDecimal ladoEsquerdo) {
        this.ladoEsquerdo = ladoEsquerdo;
    }

    public BigDecimal getFundo() {
        return fundo;
    }

    public void setFundo(BigDecimal fundo) {
        this.fundo = fundo;
    }

    public BigDecimal getAreaTotal() {
        return areaTotal;
    }

    public void setAreaTotal(BigDecimal areaTotal) {
        this.areaTotal = areaTotal;
    }

    public String getMatricula() {
        return matricula;
    }

    public void setMatricula(String matricula) {
        this.matricula = matricula;
    }

    public String getLivro() {
        return livro;
    }

    public void setLivro(String livro) {
        this.livro = livro;
    }

    public String getFolha() {
        return folha;
    }

    public void setFolha(String folha) {
        this.folha = folha;
    }

    public Date getDatada() {
        return datada;
    }

    public void setDatada(Date datada) {
        this.datada = datada;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public Date getProximaData() {
        return proximaData;
    }

    public void setProximaData(Date proximaData) {
        this.proximaData = proximaData;
    }

    public List<HistoricoRevisaoAlinhamento> getHistoricoRevisaoAlinhamentos() {
        return historicoRevisaoAlinhamentos;
    }

    public void setHistoricoRevisaoAlinhamentos(List<HistoricoRevisaoAlinhamento> historicoRevisaoAlinhamentos) {
        this.historicoRevisaoAlinhamentos = historicoRevisaoAlinhamentos;
    }

    public String getProprietarioField() {
        return proprietarioField;
    }

    public void setProprietarioField(String proprietarioField) {
        this.proprietarioField = proprietarioField;
    }

    public String getLocalImovelField() {
        return localImovelField;
    }

    public void setLocalImovelField(String localImovelField) {
        this.localImovelField = localImovelField;
    }

    public String getFrenteNumeroField() {
        return frenteNumeroField;
    }

    public void setFrenteNumeroField(String frenteNumeroField) {
        this.frenteNumeroField = frenteNumeroField;
    }

    public String getFundoNumeroField() {
        return fundoNumeroField;
    }

    public void setFundoNumeroField(String fundoNumeroField) {
        this.fundoNumeroField = fundoNumeroField;
    }

    public String getLadoDireitoNumeroField() {
        return ladoDireitoNumeroField;
    }

    public void setLadoDireitoNumeroField(String ladoDireitoNumeroField) {
        this.ladoDireitoNumeroField = ladoDireitoNumeroField;
    }

    public String getLadoEsquerdoNumeroField() {
        return ladoEsquerdoNumeroField;
    }

    public void setLadoEsquerdoNumeroField(String ladoEsquerdoNumeroField) {
        this.ladoEsquerdoNumeroField = ladoEsquerdoNumeroField;
    }

    public String getAreaTotalNumeroField() {
        return areaTotalNumeroField;
    }

    public void setAreaTotalNumeroField(String areaTotalNumeroField) {
        this.areaTotalNumeroField = areaTotalNumeroField;
    }

    public String getFrenteTextoField() {
        return frenteTextoField;
    }

    public void setFrenteTextoField(String frenteTextoField) {
        this.frenteTextoField = frenteTextoField;
    }

    public String getFundoTextoField() {
        return fundoTextoField;
    }

    public void setFundoTextoField(String fundoTextoField) {
        this.fundoTextoField = fundoTextoField;
    }

    public String getLadoEsquerdoTextoField() {
        return ladoEsquerdoTextoField;
    }

    public void setLadoEsquerdoTextoField(String ladoEsquerdoTextoField) {
        this.ladoEsquerdoTextoField = ladoEsquerdoTextoField;
    }

    public String getLadoDireitoTextoField() {
        return ladoDireitoTextoField;
    }

    public void setLadoDireitoTextoField(String ladoDireitoTextoField) {
        this.ladoDireitoTextoField = ladoDireitoTextoField;
    }

    public String getDescricaoField() {
        return descricaoField;
    }

    public void setDescricaoField(String descricaoField) {
        this.descricaoField = descricaoField;
    }

    public Boolean getInvasao() {
        return invasao;
    }

    public void setInvasao(Boolean invasao) {
        this.invasao = invasao;
    }

    public String getAreaTotalField() {
        return areaTotalField;
    }

    public void setAreaTotalField(String areaTotalField) {
        this.areaTotalField = areaTotalField;
    }

    public String getTextoInvasao() {
        return textoInvasao;
    }

    public void setTextoInvasao(String textoInvasao) {
        this.textoInvasao = textoInvasao;
    }

    public String getDescricaoPavimentacao() {
        return descricaoPavimentacao;
    }

    public void setDescricaoPavimentacao(String descricaoPavimentacao) {
        this.descricaoPavimentacao = descricaoPavimentacao;
    }

    public String getDescricaoPavimentacaoField() {
        return descricaoPavimentacaoField;
    }

    public void setDescricaoPavimentacaoField(String descricaoPavimentacaoField) {
        this.descricaoPavimentacaoField = descricaoPavimentacaoField;
    }

    public Requerimento getRequerimento() {
        return requerimento;
    }

    public void setRequerimento(Requerimento requerimento) {
        this.requerimento = requerimento;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 73 * hash + (this.id != null ? this.id.hashCode() : 0);
        hash = 73 * hash + (this.imovel != null ? this.imovel.hashCode() : 0);
        hash = 73 * hash + (this.numeroProcesso != null ? this.numeroProcesso.hashCode() : 0);
        hash = 73 * hash + (this.frente != null ? this.frente.hashCode() : 0);
        hash = 73 * hash + (this.ladoDireito != null ? this.ladoDireito.hashCode() : 0);
        hash = 73 * hash + (this.ladoEsquerdo != null ? this.ladoEsquerdo.hashCode() : 0);
        hash = 73 * hash + (this.fundo != null ? this.fundo.hashCode() : 0);
        hash = 73 * hash + (this.areaTotal != null ? this.areaTotal.hashCode() : 0);
        hash = 73 * hash + (this.matricula != null ? this.matricula.hashCode() : 0);
        hash = 73 * hash + (this.livro != null ? this.livro.hashCode() : 0);
        hash = 73 * hash + (this.folha != null ? this.folha.hashCode() : 0);
        hash = 73 * hash + (this.datada != null ? this.datada.hashCode() : 0);
        hash = 73 * hash + (this.descricao != null ? this.descricao.hashCode() : 0);
        hash = 73 * hash + (this.proximaData != null ? this.proximaData.hashCode() : 0);
        hash = 73 * hash + (this.proprietarioField != null ? this.proprietarioField.hashCode() : 0);
        hash = 73 * hash + (this.localImovelField != null ? this.localImovelField.hashCode() : 0);
        hash = 73 * hash + (this.frenteNumeroField != null ? this.frenteNumeroField.hashCode() : 0);
        hash = 73 * hash + (this.fundoNumeroField != null ? this.fundoNumeroField.hashCode() : 0);
        hash = 73 * hash + (this.ladoDireitoNumeroField != null ? this.ladoDireitoNumeroField.hashCode() : 0);
        hash = 73 * hash + (this.ladoEsquerdoNumeroField != null ? this.ladoEsquerdoNumeroField.hashCode() : 0);
        hash = 73 * hash + (this.areaTotalNumeroField != null ? this.areaTotalNumeroField.hashCode() : 0);
        hash = 73 * hash + (this.frenteTextoField != null ? this.frenteTextoField.hashCode() : 0);
        hash = 73 * hash + (this.fundoTextoField != null ? this.fundoTextoField.hashCode() : 0);
        hash = 73 * hash + (this.ladoEsquerdoTextoField != null ? this.ladoEsquerdoTextoField.hashCode() : 0);
        hash = 73 * hash + (this.ladoDireitoTextoField != null ? this.ladoDireitoTextoField.hashCode() : 0);
        hash = 29 * hash + (this.requerimento != null ? this.requerimento.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final RevisaoAlinhamento other = (RevisaoAlinhamento) obj;
        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
            return false;
        }
        if (this.imovel != other.imovel && (this.imovel == null || !this.imovel.equals(other.imovel))) {
            return false;
        }
        if ((this.numeroProcesso == null) ? (other.numeroProcesso != null) : !this.numeroProcesso.equals(other.numeroProcesso)) {
            return false;
        }
        if (this.frente != other.frente && (this.frente == null || !this.frente.equals(other.frente))) {
            return false;
        }
        if (this.ladoDireito != other.ladoDireito && (this.ladoDireito == null || !this.ladoDireito.equals(other.ladoDireito))) {
            return false;
        }
        if (this.ladoEsquerdo != other.ladoEsquerdo && (this.ladoEsquerdo == null || !this.ladoEsquerdo.equals(other.ladoEsquerdo))) {
            return false;
        }
        if (this.fundo != other.fundo && (this.fundo == null || !this.fundo.equals(other.fundo))) {
            return false;
        }
        if (this.areaTotal != other.areaTotal && (this.areaTotal == null || !this.areaTotal.equals(other.areaTotal))) {
            return false;
        }
        if ((this.matricula == null) ? (other.matricula != null) : !this.matricula.equals(other.matricula)) {
            return false;
        }
        if ((this.livro == null) ? (other.livro != null) : !this.livro.equals(other.livro)) {
            return false;
        }
        if ((this.folha == null) ? (other.folha != null) : !this.folha.equals(other.folha)) {
            return false;
        }
        if (this.datada != other.datada && (this.datada == null || !this.datada.equals(other.datada))) {
            return false;
        }
        if ((this.descricao == null) ? (other.descricao != null) : !this.descricao.equals(other.descricao)) {
            return false;
        }
        if (this.proximaData != other.proximaData && (this.proximaData == null || !this.proximaData.equals(other.proximaData))) {
            return false;
        }
        if ((this.proprietarioField == null) ? (other.proprietarioField != null) : !this.proprietarioField.equals(other.proprietarioField)) {
            return false;
        }
        if ((this.localImovelField == null) ? (other.localImovelField != null) : !this.localImovelField.equals(other.localImovelField)) {
            return false;
        }
        if ((this.frenteNumeroField == null) ? (other.frenteNumeroField != null) : !this.frenteNumeroField.equals(other.frenteNumeroField)) {
            return false;
        }
        if ((this.fundoNumeroField == null) ? (other.fundoNumeroField != null) : !this.fundoNumeroField.equals(other.fundoNumeroField)) {
            return false;
        }
        if ((this.ladoDireitoNumeroField == null) ? (other.ladoDireitoNumeroField != null) : !this.ladoDireitoNumeroField.equals(other.ladoDireitoNumeroField)) {
            return false;
        }
        if ((this.ladoEsquerdoNumeroField == null) ? (other.ladoEsquerdoNumeroField != null) : !this.ladoEsquerdoNumeroField.equals(other.ladoEsquerdoNumeroField)) {
            return false;
        }
        if ((this.areaTotalNumeroField == null) ? (other.areaTotalNumeroField != null) : !this.areaTotalNumeroField.equals(other.areaTotalNumeroField)) {
            return false;
        }
        if ((this.frenteTextoField == null) ? (other.frenteTextoField != null) : !this.frenteTextoField.equals(other.frenteTextoField)) {
            return false;
        }
        if ((this.fundoTextoField == null) ? (other.fundoTextoField != null) : !this.fundoTextoField.equals(other.fundoTextoField)) {
            return false;
        }
        if ((this.ladoEsquerdoTextoField == null) ? (other.ladoEsquerdoTextoField != null) : !this.ladoEsquerdoTextoField.equals(other.ladoEsquerdoTextoField)) {
            return false;
        }
        if ((this.ladoDireitoTextoField == null) ? (other.ladoDireitoTextoField != null) : !this.ladoDireitoTextoField.equals(other.ladoDireitoTextoField)) {
            return false;
        }
        if (this.requerimento != other.requerimento && (this.requerimento == null || !this.requerimento.equals(other.requerimento))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "RevisaoAlinhamento{" + "id=" + id + ", imovel=" + imovel + ", numeroProcesso=" + numeroProcesso + ", frente=" + frente + ", ladoDireito=" + ladoDireito + ", ladoEsquerdo=" + ladoEsquerdo + ", fundo=" + fundo + ", areaTotal=" + areaTotal + ", matricula=" + matricula + ", livro=" + livro + ", folha=" + folha + ", datada=" + datada + ", descricao=" + descricao + ", proximaData=" + proximaData + '}';
    }
}
